A graphics processing unit (GPU) is a dedicated graphics rendering device used to generate computerized graphics for display on a display device. A GPU is typically used with a general purpose central processing unit (CPU) to process graphic image data, e.g., three-dimensional computerized graphic image data. In such a case, a GPU can implement a number of primitive graphics operations to create three-dimensional images for display on a display device more quickly than using a CPU to draw the image for display on the display device. Typically, a GPU includes hardware that implements some number of the complex algorithms in hardware.
A typical GPU receives an image geometry and uses a pipeline approach to generate graphics which can be output, for example, for display on a display device. A typical graphics pipeline includes a number of stages which operate in parallel, with the output from one stage possibly being used at another stage in the pipeline. For example, a typical graphics pipeline comprises vertex shader, primitive assembly, viewport transformation, primitive setup, rasterization, hidden primitive and pixel rejection, attribute setup, attribute interpolation and fragment shader stages.
A vertex shader is applied to the image geometry for an image and generates vertex coordinates and attributes of vertices within the image geometry. Vertex attributes include, for example, color, normal, and texture coordinates associated with a vertex. Primitive assembly forms primitives, e.g., point, line, and triangle primitives, from the vertices based on the image geometry. Formed primitives can be transformed from one space to another using a transformation, e.g., a viewport transformation which transforms primitives from a normalized device space to a screen space. Primitive setup can be used to determine a primitive's area, edge coefficients, and perform occlusion culling (e.g., backface culling), and 3-D clipping operations.
Rasterization converts primitives into pixels based on the XY coordinates of vertices within the primitives and the number of pixels included in the primitives. Hidden primitive and pixel rejection use the z coordinate of the primitives and/or pixels to determine and reject those primitives and pixels determined to be hidden (e.g., a primitive or pixel located behind another primitive or pixel in the image frame, a transparent primitive or pixel). Attribute setup determines attribute gradients, e.g., a difference between the attribute value at a first pixel and the attribute value at a second pixel within a primitive moving in either a horizontal (X) direction or a vertical (Y) direction, for attributes associated with pixels within a primitive. Attribute interpolation interpolates the attributes over the pixels within a primitive based on the determined attribute gradient values. Interpolated attribute values are sent to the fragment shader for pixel rendering. Results of the fragment shader can be output to a post-processing block and a frame buffer for presentation of the processed image on the display device.
It is beneficial to facilitate the graphics pipeline processing to achieve increased throughput. Efforts have been made to increase throughput by optimizing software that implements a portion of the graphics pipeline. However, such an approach is costly, since it typically requires significant programmer effort and time to generate the optimized program code. Increased throughput might be achieved using dedicated hardware. However, such an approach involves additional cost for the dedicated hardware, which hardware is only available to be used for a dedicated purpose.